Projet GH-382 - Je cherche à convertir en SQL des query de filtre basé sur un système de "tags"

Ce projet a été initialement commencé dans une issue le 8 mars 2024.

Sur un modèle de données SQL qui implémente un système de tags comme celui décrit ici, je souhaite pouvoir appliquer des filtres qui ressemblent à ceci :

  • a. tag_a or tag_b
  • b. tag_a and tag_b
  • c. tag_a and (not tag_b)
  • d. (tag_a and tag_b) or (tag_c and tag_d)
  • ...

Voici à quels filtres (where) SQL peuvent ressembler ces filtres :

  • a. WHERE contacts.tags && (SELECT ARRAY_AGG(id) FROM contact_tags WHERE name = ANY(ARRAY['tag_a', 'tag_b'])
  • b. WHERE contacts.tags @> (SELECT ARRAY_AGG(id) FROM contact_tags WHERE name = ANY(ARRAY['tag_a', 'tag_b'])
  • c.
WHERE
  (contacts.tags && (SELECT ARRAY_AGG(id) FROM contact_tags WHERE name = ANY(ARRAY['tag_a'])) AND
  (NOT (contacts.tags && (SELECT ARRAY_AGG(id) FROM contact_tags WHERE name = ANY(ARRAY['tag_a'])))
  • d.
WHERE
  (contacts.tags && (SELECT ARRAY_AGG(id) FROM contact_tags WHERE name = ANY(ARRAY['tag_a', 'tag_b'])) OR
  (contacts.tags && (SELECT ARRAY_AGG(id) FROM contact_tags WHERE name = ANY(ARRAY['tag_c', 'tag_d']))

Questions que je me pose :

  • Existe-t-il un "langage" de query de tag sur lequel je pourrais me baser ?
  • Existe-t-il un parser qui me permettrait de transformer ma query de filtre en SQL ?

Todo :


Journaux liées à cette note :

Journal du dimanche 10 mars 2024 à 10:29 #iteration

#iteration du Projet GH-382 - Je cherche à convertir en SQL des query de filtre basé sur un système de "tags".

J'ai rédigé la version Française du billet que je souhaite publier : https://a51nxj8cxk.joplinusercontent.com/shares/c0UzIdTp2nlP0H1R7I4o5F.

Version anglaise du billet : https://a51nxj8cxk.joplinusercontent.com/shares/qCbq5t9WA3o4xr8b5CgZjW.

Proposition de titre en FR : "Demande de conseils pour convertir une query filter string sur des tags en SQL, exemple "(tag1 and tag2) or tag3" en SQL"

Proposition de titre en EN : "Need advice on how to convert a filter string query on tags in SQL, for example "(tag1 and tag2) or tag3" in SQL?"

J'ai posté le billet sur https://old.reddit.com/r/PostgreSQL/comments/1bb6qvj/need_advice_on_how_to_convert_a_filter_string/? et aussi sur https://sklein.xyz/fr/posts/2024-03-10_demande-de-conseils-pour-convertir-une-query-filter-string-sur-des-tags-en-sql/

On m'a partagé Peggy qui me semble en effet, intéressant.

Journal du samedi 09 mars 2024 à 10:22 #iteration, #JaiLu

#iteration du Projet GH-382 - Je cherche à convertir en SQL des query de filtre basé sur un système de "tags".

#JaiLu Google Search Operators: The Complete List (44 Advanced Operators)

Je constate que le langage de query de Google support OR, AND, les (……)… En résumé, toutes les fonctionnalités que je souhaite.


Dans l'article How to use advanced syntax on DuckDuckGo Search je comprends que le langage de query de DuckDuckGo supporte les fonctionnalités que je souhaite, mais avec une syntax intéressante, sans doute pratique, mais je la juge moins explicite que celle de Google.


J'ai lu la page Log queries de Loki et je ne la trouve pas adaptée à mon besoin. Cette syntax est trop puissante. Je souhaite quelque chose de plus limité, qui permette seulement d'effectuer des filtres basés sur des tags.


J'ai lu la page Filtering projects de GitHub et je constate que ce langage de query est trop limité, ne correspond pas à mon besoin.


La syntax de recherche de Lobsters est trop limitée par rapport à mon besoin https://lobste.rs/search


Concernant Jira, j'ai commencé ma lecture sur cette page Use advanced search with Jira Query Language (JQL), j'ai ensuite lu :

Le "Jira Query Language (JQL)" est très puissant, même trop puissant par rapport à mon besoin.


J'ai lu la page Filtering de Meilisearch.

La syntaxe est puissante, intéressante.


Après avoir étudié les query search syntax de Google, Duckduckgo, Melisearch, Loki, GitHub, Jira, Lobster je constate que mon besoin est un peu spécifique, car je souhaite effectuer des filtrages seulement sur les lables.

Le moteur de syntaxe qui ressemble le plus à ce que je cherche est le langage de syntaxe de Google.


Mon objectif est de pouvoir appliquer des règles d'appartenance sur les tags.